package homework_2020_03_15;

/**367. 有效的完全平方数
 * 给定一个正整数 num，编写一个函数，如果 num 是一个完全平方数，则返回 True，否则返回 False。
 *
 * 说明：不要使用任何内置的库函数，如  sqrt。
 *
 * 示例 1：
 *
 * 输入：16
 * 输出：True
 * 示例 2：
 *
 * 输入：14
 * 输出：False
 */
public class leetcode_367 {
    public static void main(String[] args) {
        Solution_367 s = new Solution_367();
        int num = 16;
        System.out.println(s.isPerfectSquare(num));
    }
}
class Solution_367 {
    /**
     * 二分法
     * @param num
     * @return
     */
    public boolean isPerfectSquare(int num) {
        if (num < 2) {
            return true;
        }

        long left = 2;
        long right = num / 2;
        long x, square;
        while (left <= right) {
            x = left + (right - left) / 2;
            square = x * x;
            if (square == num) {
                return true;
            }
            if (square > num) {
                right = x - 1;//剔除边界
            } else {
                left = x + 1;//剔除边界
            }
        }
        return false;

    }
}
